// Copyright 2022 a.o.smith ALL Rights Reserved
package com.liuxinlong.modules.patent.service;

import com.liuxinlong.common.ImportResp;
import com.liuxinlong.modules.entity.PatentProposal;
import com.liuxinlong.modules.patent.dto.ImportPatentProposalDto;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

/**
 * 风险专利信息接口
 *
 * @author liuxinlong@hotwater.com.cn
 * @version 1.0.0
 * @since 2024-03-18
 */
public interface PatentProposalService {
    /**
     * 分页查询风险专利信息
     *
     * @param queryParam 请求信息
     * @return 风险专利信息列表
     */
    List<Map<String, Object>> pagePatentProposalInfo(Map<String, Object> queryParam);

    /**
     * 统计风险专利数量
     *
     * @param queryParam 查询参数
     * @return 风险专利数量
     */
    int countPatentProposal(Map<String, Object> queryParam);

    /**
     * 新增风险专利信息
     *
     * @param patentProposal 风险专利信息
     */
    void addPatentProposalInfo(PatentProposal patentProposal);

    /**
     * 更新风险专利信息
     *
     * @param patentProposal 风险专利信息
     * @param pushUser       通知用户
     */
    void updatePatentProposalInfo(PatentProposal patentProposal, String pushUser);

    /**
     * 删除风险专利信息
     *
     * @param id 风险专利id
     */
    void deletePatentProposalInfo(String id);

    /**
     * 更新风险专利状态信息
     *
     * @param id           风险专利id
     * @param targetStatus 目标状态
     * @param remark       备注
     */
    void updatePatentProposalStatus(String id, int targetStatus, String remark);

    /**
     * 分页查询风险专利信息
     *
     * @param id 请求信息
     * @return 风险专利信息列表
     */
    List<Map<String, Object>> queryPatentProposalList(String id);

    /**
     * 导入数据预处理
     *
     * @param fileName 文件地址
     * @return 预处理数据
     */
    ImportResp importPatentProposals(String fileName);

    /**
     * 批量新增风险专利信息
     *
     * @param riskId   设计差异点id
     * @param dataList 风险专利列表
     * @return 失败数据
     */
    ImportResp batchAddPatentProposal(String riskId, List<ImportPatentProposalDto> dataList);

    /**
     * 导出风险专利信息
     *
     * @param param    查询条件
     * @param response response
     */
    void exportPatentProposal(Map<String, Object> param, HttpServletResponse response);

    /**
     * 发起专利风险评估流程
     *
     * @param id         风险专利id
     * @param dataString 数据
     * @param changeList 风险专利列表
     */
    void startWorkflow(String id, String dataString, List<Map<String, Object>> changeList);
}

